package com.ruoyi.ldzlsc.mapper;

import com.ruoyi.ldzlsc.domain.ScWorkOrderTask;
import com.ruoyi.ldzlsc.domain.vo.*;

import java.util.List;

/**
 * 工序任务 Mapper接口
 *
 * @author ruoyi
 */
public interface ScWorkOrderTaskMapper {
    /**
     * 新增工序任务
     *
     * @param task 工序任务对象
     * @return 结果
     */
    public int insertWorkOrderTask(ScWorkOrderTask task);

    /**
     * 批量新增工序任务
     *
     * @param tasks 工序任务列表
     * @return 结果
     */
    public int batchInsertWorkOrderTasks(List<ScWorkOrderTask> tasks);

    /**
     * 根据工单ID查询工序任务列表
     *
     * @param workOrderId 工单ID
     * @return 工序任务集合
     */
    public List<WorkOrderTaskVO> selectWorkOrderTasksByWorkOrderId(Long workOrderId);

    /**
     * 根据工序任务ID查询工序任务
     *
     * @param taskId 工序任务ID
     * @return 工序任务
     */
    public WorkOrderTaskVO selectWorkOrderTaskById(Long taskId);

    /**
     * 更新工序任务状态
     *
     * @param task 工序任务
     * @return 结果
     */
    public int updateWorkOrderTaskStatus(ScWorkOrderTask task);


    /**
     * 查询工单任务列表
     *
     * @param scWorkOrderTask 工单任务
     * @return 工单任务集合
     */
    public List<ScWorkOrderTask> selectScWorkOrderTaskList(ScWorkOrderTask scWorkOrderTask);

    public List<ScTaskVo> selectReportableTaskList(ScTaskVo query);


    /**
     * 根据工单ID删除工单任务
     *
     * @param workOrderId 工单ID
     * @return 结果
     */
    public int deleteScWorkOrderTaskByWorkOrderId(Long workOrderId);

    /**
     * 根据工序任务ID查询工序任务
     *
     * @param workOrderTaskId 工序任务ID
     * @return 工序任务
     */
    public ScWorkOrderTask selectScWorkOrderTaskByWorkOrderTaskId(Long workOrderTaskId);

    /**
     * 修改工序任务
     *
     * @param scWorkOrderTask 工序任务
     * @return 结果
     */
    public int updateScWorkOrderTask(ScWorkOrderTask scWorkOrderTask);

    /**
     * 根据工单任务ID批量删除工单任务
     *
     * @param workOrderTaskIds 工单任务ID数组
     * @return 结果
     */
    public int deleteScWorkOrderTaskByWorkOrderTaskIds(Long[] workOrderTaskIds);
    
    /**
     * 统计未完成的任务数量
     * @param workOrderId
     * @return
     */
    public long countUnfinishedTasksByWorkOrderId(Long workOrderId);

    /**
     * 获取工序任务详情（包含关联信息）
     * @param workOrderTaskId 工序任务ID
     * @return 工序任务详情
     */
    public WorkOrderTaskDetailVO selectWorkOrderTaskDetailById(Long workOrderTaskId);

    /**
     * 获取工序任务物料清单
     * @param workOrderTaskId 工序任务ID
     * @return 物料清单
     */
    public List<TaskMaterialVO> selectTaskMaterialsByTaskId(Long workOrderTaskId);

    /**
     * 获取工序任务报工记录
     * @param workOrderTaskId 工序任务ID
     * @return 报工记录
     */
    public List<TaskReportVO> selectTaskReportsByTaskId(Long workOrderTaskId);

    /**
     * 获取工序任务退料记录
     * @param workOrderTaskId 工序任务ID
     * @return 退料记录
     */
    public List<TaskReturnVO> selectTaskReturnsByTaskId(Long workOrderTaskId);

    /**
     * 获取工序任务执行进度
     * @param workOrderTaskId 工序任务ID
     * @return 执行进度
     */
    public List<TaskProgressVO> selectTaskProgressByTaskId(Long workOrderTaskId);

    /**
     * 获取工序任务派工信息
     * @param workOrderTaskId 工序任务ID
     * @return 派工信息
     */
    public WorkOrderTaskDetailVO.DispatchInfo selectTaskDispatchByTaskId(Long workOrderTaskId);
}